package com.dongnao.jack.config;

import java.util.List;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.method.support.HandlerMethodReturnValueHandler;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

import com.dongnao.jack.interceptor.JackInterceptor;
import com.dongnao.jack.interceptor.JeffInterceptor;

@Configuration
public class SpringInterceptorRegister extends WebMvcConfigurerAdapter {
    private static final Logger logger = LoggerFactory.getLogger(SpringInterceptorRegister.class);
    
    //跟spring一样，还可以扩展参数转换和返回值的处理
    @Override
	public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
		// TODO Auto-generated method stub
		super.extendMessageConverters(converters);
	}

	@Override
	public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
		// TODO Auto-generated method stub
		super.addArgumentResolvers(argumentResolvers);
	}

	@Override
	public void addReturnValueHandlers(List<HandlerMethodReturnValueHandler> returnValueHandlers) {
		// TODO Auto-generated method stub
		super.addReturnValueHandlers(returnValueHandlers);
	}

	/* 
     * 添加spring中的拦截器
     */
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new JackInterceptor()).addPathPatterns("/**");
        registry.addInterceptor(new JeffInterceptor()).addPathPatterns("/freemarker/**");
        super.addInterceptors(registry);
    }
    
    /* 
     * 注册静态文件的自定义映射路径，
     * 
     * 默认资源映射
		其中默认配置的 /** 映射到 /static （或/public、/resources、/META-INF/resources） 
		其中默认配置的 /webjars/** 映射到 classpath:/META-INF/resources/webjars/ 
		上面的 static、public、resources 等目录都在 classpath: 下面（如 src/main/resources/static）。
	  
	  也通过配置文件映射：
	  	使用 spring.mvc.static-path-pattern 可以重新定义pattern，如修改为 /image/**
		使用 spring.resources.static-locations 可以重新定义 pattern 所指向的路径，支持 classpath: 和 file: 
	  注意： spring.mvc.static-path-pattern 只可以定义一个，目前不支持多个逗号分割的方式。

	 # 默认值为 /** 
		spring.mvc.static-path-pattern= /image/**
	# 默认值为 classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/ 
		spring.resources.static-locations=classpath:/image/
	注意加载顺序：先找/META-INF/resources，再找classpath:/resources/
     */
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
    	//  /image/** 这个是url请求路径
    	//  classpath:/image/ 去这个路径寻找静态资源，且支持本地路径
        registry.addResourceHandler("/image/**")
                .addResourceLocations("classpath:/image/");
        registry.addResourceHandler("/picture/**")
                .addResourceLocations("file:D:/picture/");
        super.addResourceHandlers(registry);
    }
    
    /** 
     * @Description 注册分页插件 
     * @param @return 参数 
     * @return PageHelper 返回类型  
     * @throws 
     */
    //    @Bean
    //    public PageHelper pageHelper() {
    //        logger.info("注册MyBatis分页插件PageHelper");
    //        PageHelper pageHelper = new PageHelper();
    //        Properties p = new Properties();
    //        p.setProperty("offsetAsPageNum", "true");
    //        p.setProperty("rowBoundsWithCount", "true");
    //        p.setProperty("reasonable", "true");
    //        pageHelper.setProperties(p);
    //        return pageHelper;
    //    }
}
